package br.com.vilababy.sigvb.mb.aluno;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import br.com.vilababy.sigvb.SIGVBUtil;
import br.com.vilababy.sigvb.constantes.SIGVBEnum;
import br.com.vilababy.sigvb.mb.AbstractAlunoMBean;
import br.com.vilababy.sigvb.modelo.Aluno;
import br.com.vilababy.sigvb.repository.AlunoRepository;

@ManagedBean
@ViewScoped
public class CameraMBean extends AbstractAlunoMBean implements Serializable {
	
	/**
	 * @author Diego Patrikc da Silva Santos
	 */
	private static final long serialVersionUID = 1L;
	private LazyDataModel<Aluno> alunosUsuario;
	
	//CONSTRUTOR
	public CameraMBean() {
		setRepositoryAluno(new AlunoRepository());
		setComboAlunos(((AlunoRepository) getRepositoryAluno()).consultarAlunoSemUsuario());
	}
	
	public final LazyDataModel<Aluno> getAlunosUsuario() {
		return this.alunosUsuario;
	}
	public final void setAlunosUsuario(LazyDataModel<Aluno> alunosUsuario) {
		this.alunosUsuario = alunosUsuario;
	}
	
	@Override
	public List<Aluno> getComboAlunos() {
		if (SIGVBUtil.getObjetoSessao(SIGVBEnum.ATUALIZAR_COMBO.getValor()) != null && (Boolean)SIGVBUtil.getObjetoSessao(SIGVBEnum.ATUALIZAR_COMBO.getValor())) {
			SIGVBUtil.removerObjetoSessao(SIGVBEnum.ATUALIZAR_COMBO.getValor());
			return ((AlunoRepository) getRepositoryAluno()).consultarAlunoSemUsuario();
		}
		return super.getComboAlunos();
	}

	@PostConstruct
	public void consultarUsuariosPaginacao() {
		this.alunosUsuario = new LazyDataModel<Aluno>() {

			private static final long serialVersionUID = 1L;
			
			@Override
			public List<Aluno> load(int primeiroRegistro, int totalRegistrosPagina,
					String campoOrdenacao, SortOrder ordenacao, Map<String, Object> filtros) {
				
				setRowCount(((AlunoRepository) getRepositoryAluno()).totalUsuariosCameraFiltrados());
				
				setPageSize(totalRegistrosPagina);
				
				return ((AlunoRepository) getRepositoryAluno()).consultarAlunosUsuario(primeiroRegistro, totalRegistrosPagina);
			}
		}; 
				
	}
	
	public void adicionarUsuarioCamera(ActionEvent evento) {
		try {
			getRepositoryAluno().atualizar(getAlunoCamera());
		} catch (Exception ex) {
			SIGVBUtil.retornarMensagemErro(SIGVBUtil.getValorMensagem(SIGVBEnum.FALHA_CADASTRO.getValor()), SIGVBUtil.getValorMensagem(SIGVBEnum.FALHA_CADASTRO_USUARIO_CFTV.getValor()));
		}
		
		SIGVBUtil.adicionarMensagemSucesso(SIGVBUtil.getValorMensagem(SIGVBEnum.LABEL_CADASTRO.getValor()), SIGVBUtil.getValorMensagem(SIGVBEnum.CADASTRO_USUARIO_CAMERA_SUCESSO.getValor()));
		consultarUsuariosPaginacao();
		limparTela();
	}
	
	private Aluno getAlunoCamera() {
		Aluno aluno = ((AlunoRepository) getRepositoryAluno()).get(getAlunoSelecionado().getId());
		aluno.setUsuarioCamera(getAlunoSelecionado().getUsuarioCamera());
		aluno.setSenhaCamera(getAlunoSelecionado().getSenhaCamera());
		return aluno;
	}
	
	@Override
	protected void limparTela() {
		setComboAlunos(((AlunoRepository) getRepositoryAluno()).consultarAlunoSemUsuario());
		getAlunoSelecionado().setUsuarioCamera(SIGVBEnum.VAZIO.getValor());
		getAlunoSelecionado().setSenhaCamera(SIGVBEnum.VAZIO.getValor());
	}
}
